package issr.market.controller;

import issr.market.db.impl.DBControllerImpl;
import issr.market.model.Utente;
import issr.market.services.GestioneUtenteService;
import issr.market.utils.Constants;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.rest.DefaultHttpHeaders;
import org.apache.struts2.rest.HttpHeaders;

@Results({ @Result(name = "accesso", type = "redirectAction", params = {
		"actionName", "accesso" }),
		@Result(name = "login", type = "redirectAction", params = {
				"actionName", "login" })
})
public class CredenzialiController extends AbstractController {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1433332621007879938L;

	private String idModifica;
	private String nomeUtente;
	private String loginUtente;
	private String password;
	private String mailUtente;
	private String telUtente;
	private String ruoloUtente;
	private String scadenzaPwd;
	private String scadenzaReg;

	private List<Utente> model = new ArrayList<Utente>();
	
	private String[] idUtente;

	private List<Utente> utenti;

	private String ordinamento;

	private Logger logger = Logger.getLogger(CredenzialiController.class);

	//GET /credenziali
	public HttpHeaders index() {

		if(accessForbidden())
			return new DefaultHttpHeaders("login")
				.disableCaching();
		
		
		utenti = initializeGestoreCredenzialiView(ordinamento);
		return super.index();
	}

	//POST /credenziali
	public HttpHeaders create() {
				
		logger.info("Creazione utente");
		GestioneUtenteService.creaUtente(nomeUtente, loginUtente, password,
				mailUtente, telUtente, scadenzaReg, scadenzaPwd, ruoloUtente);

		if (Integer.valueOf(ruoloUtente) == Constants.NUM_RUOLO_ADMIN_GENERALE)
			return new DefaultHttpHeaders("accesso").disableCaching();

		return index();
	}

	
	//PUT /credenziali/idModifica
	public String update(){
				
		GestioneUtenteService.modificaUtente(nomeUtente, loginUtente,
				password, mailUtente, telUtente, scadenzaReg, scadenzaPwd,
				ruoloUtente, idModifica);
		
		return "view";
		
	}
	
	//DELETE /credenziali/id
	public HttpHeaders destroy(){
		GestioneUtenteService.cancellaUtente(idUtente);
		
		return new DefaultHttpHeaders("accesso").disableCaching();
	}
	
	public List<Utente> getUtenti() {
		return utenti;
	}

	public String getOrdinamento() {
		return ordinamento;
	}

	public void setOrdinamento(String ordinamento) {
		this.ordinamento = ordinamento;
	}

	public static List<Utente> initializeGestoreCredenzialiView(
			String ordinamento) {

		List<Utente> utenti = new DBControllerImpl().getUtenti(ordinamento);
		if (ordinamento == null)
			ordinamento = "default";

		return utenti;
	}

	public String getNomeUtente() {
		return nomeUtente;
	}

	public void setNomeUtente(String nomeUtente) {
		this.nomeUtente = nomeUtente;
	}

	public String getLoginUtente() {
		return loginUtente;
	}

	public void setLoginUtente(String loginUtente) {
		this.loginUtente = loginUtente;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getMailUtente() {
		return mailUtente;
	}

	public void setMailUtente(String mailUtente) {
		this.mailUtente = mailUtente;
	}

	public String getTelUtente() {
		return telUtente;
	}

	public void setTelUtente(String telUtente) {
		this.telUtente = telUtente;
	}

	public String getRuoloUtente() {
		return ruoloUtente;
	}

	public void setRuoloUtente(String ruoloUtente) {
		this.ruoloUtente = ruoloUtente;
	}

	public String getScadenzaPwd() {
		return scadenzaPwd;
	}

	public void setScadenzaPwd(String scadenzaPwd) {
		this.scadenzaPwd = scadenzaPwd;
	}

	public String getScadenzaReg() {
		return scadenzaReg;
	}

	public void setScadenzaReg(String scadenzaReg) {
		this.scadenzaReg = scadenzaReg;
	}

	public void setIdUtente(String[] idUtente) {
		this.idUtente = idUtente;
	}

	public String getIdModifica() {
		return idModifica;
	}

	public void setIdModifica(String idModifica) {
		this.idModifica = idModifica;
	}
	
	@Override
	public Object getModel(){
		return (utenti!=null)? utenti : model;
	}

}
